﻿// 1386. 卡米洛特.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>


/*

https://www.acwing.com/problem/content/1388/
几个世纪之前，亚瑟王每年元旦都会和圆桌骑士们一起聚会。

为了纪念这些事件，我们考虑一个棋盘游戏，在一个 R×C 的方格棋盘中，放着一个国王和若干个骑士。

没有任何两个骑士被放到同一个方格中。

一个 8×8 的棋盘如下所示：

camelot-1.gif

国王可以移动到任何一个相邻的方格中，前提是不能走出棋盘：

camelot-2.gif

骑士可以从下图黑子位置跳到任一白子位置，前提是不能走出棋盘：

camelot-3.gif

在游戏过程中，玩家可以在同一方格中放置多个棋子。（假设方格够大，任何棋子都不会影响到其他棋子的自由移动。）

玩家的任务是移动这些棋子，将它们移动到同一个方格之中，并且使得移动步数尽可能少。

棋子的移动需要遵守之前叙述的移动规则。

另外，当国王和一个或更多骑士处于同一方格中时，玩家可以选择让国王和其中一个骑士从这个位置开始一起行动直至任务完成。

此时两者视为一个整体，按照骑士的移动规则移动，并且每次移动只算一步。

请输出将所有棋子汇聚在一个格子之中，至少要移动多少步。

汇聚在任何一个格子上均可。

输入格式
第一行包含两个整数 R 和 C，表示棋盘的行数和列数。

接下来若干行，用来描述国王和骑士在棋盘中的位置。

每行包含一个或多个字母/数字对，第一对描述的是国王的位置，其他对描述的是骑士的位置，棋盘中可能没有骑士，也可能所有方格中都有骑士。

行从 1 开始编号，列从 A 开始编号。

输出格式
输出一个整数，表示最少移动步数。

数据范围
1≤R≤30,
1≤C≤26
输入样例：
8 8
D 4
A 3 A 8
H 1 H 8
输出样例：
10
样例解释
8×8 的棋盘上，国王在 D4，四个骑士分别在 A3,A8,H1,H8。

四个骑士的行动为：

骑士一：A3−B5 （一步）
骑士二：A8−C7−B5 （两步）
骑士三：H1−G3−F5−D4(带上国王)−B5 (四步)
骑士四：H8−F7−D6−B5 （三步）
所有棋子汇集在 B5，共移动 10 步。
*/
int main()
{
    std::cout << "Hello World!\n";
}

